package com.lh.upload.service.impl;

import com.lh.upload.service.IUploadService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

@Service
@Slf4j
public class UploadServiceImpl implements IUploadService {

    private static final List<String> CONTENT_TYPES = Arrays.asList("image/jpeg", "image/gif", "image/png");

    @Override
    public String upload(MultipartFile file) {
        String originalFilename = file.getOriginalFilename();
        String contentType = file.getContentType();
        if (!CONTENT_TYPES.contains(contentType)) {
            log.error("文件类型不合法：{}", originalFilename);
            return null;
        }
        try {
            BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
            if (null == bufferedImage) {
                log.error("文件内容不合法：{}", file.getOriginalFilename());
                return null;
            }
            file.transferTo(new File("D:\\com\\images\\" + originalFilename));

            /*
            这里有一个问题：为什么图片地址需要使用另外的url？
            - 图片不能保存在服务器内部，这样会对服务器产生额外的加载负担
            - 一般静态资源都应该使用独立域名，这样访问静态资源时不会携带一些不必要的cookie，减小请求的数据量
             */
            return "http://image.leyi.com/" + originalFilename;

        } catch (IOException e) {
            log.error("服务器内部错误：{}", originalFilename);
            e.printStackTrace();
        }
        return null;
    }
}
